package main

import (
	"sync"
)

var icons map[string]int

var loadIconsOnce sync.Once


//sync.Once其实内部包含一个互斥锁和一个布尔值，
// 互斥锁保证布尔值和数据的安全，而布尔值用来记录初始化是否完成。这样设计就能保证初始化操作的时候是并发安全的并且初始化操作也不会被执行多次。
//用来保证配置文件只会被加载一次
func loadIcons() {
	icons = map[string]int{
		"left":  1,
		"up":    2,
		"right": 3,
		"down": 4,
	}
}

// Icon 是并发安全的
func Icon(name string) int {
	loadIconsOnce.Do(loadIcons)
	return icons[name]
}
